const { User,Stu } = require("../db/mongodb");
const router =require("koa-router")();
const md5 = require('md5-node');
// 生成token
const jwt=require("jsonwebtoken");
const key="sdfjlsajdflasjdflasj";

//注册
router.post("/register",async (ctx)=>{
    let {usr,pass}=ctx.request.body;
    let pwd=md5(pass);
    //判断用户账号是否已经被注册了
    let user=await User.findOne({usr:usr});
    if (user) {
        ctx.body = {
            status: 401,
            msg: "账号已经被注册了"
        };
        return
    } else {
        const users = await new User({
            usr,
            pwd,
        });
        //save方法是异步的，必须等待它执行完成后才能ctx.body，否则，ctx.body是无法返回到页面的
        const isSuccess = await users.save()
            .then(() => {
                return true
            })
            .catch(err => {
                console.log(err);
                return false
            });
        ctx.body = isSuccess ? {status: 200, msg: "注册成功"} : {status: 400, msg: "注册失败"}
    };
});

//登录
router.post("/login",async (ctx)=>{
    // 获取前端提交过来的数据
    const {usr,pass}=ctx.request.body;
    let pwd=md5(pass);
    // 访问数据库后将用户名和密码获取到，密码加密获取的
    await User.findOne({usr,pwd},function (err,user) {
        if(user){
            // 如果成功后，获得jsonwebtooken中的tooken
            // 这里的key是自己定义好的一个字符串（随便定义）
            const token=jwt.sign({usr:usr},key);
            ctx.cookies.set( //存储cookie
                "token",
                token.toString(),
                {
                    domain:'localhost', // 写cookie所在的域名
                    path:'/login',       // 写cookie所在的路径
                    maxAge:1000*60*60*24,   // cookie有效时长
                    expires:new Date('2021-12-12'), // cookie失效时间
                    httpOnly:false,  // 是否只用于http请求中获取
                    overwrite:false  // 是否允许重写
                }
            );
            ctx.body={
                code:200,
                msg:"登录成功",
                token:token,
                user:usr
            }
        }else{
            // 登录失败
            ctx.body={
                code:401,
                msg:"登录失败,请检查用户名和密码是否错误",
            };
            return;
        }
    });
});

//查询user表
router.get("/findAll",async (ctx)=>{
    let result=await User.find(ctx.query).then(res=>{
        return res;
    }).catch(err=>{
        return err;
    });
    ctx.body={
        code:200,
        msg:"请求成功！",
        result:result
    }
});
//删除用户信息
router.post('/delUser',async ctx => {
    const res = ctx.request.body;
    const { _id } = res;
    if(_id) {
        // 根据id删除数据
        await User.deleteOne({ _id: _id });
        ctx.body = {
            status: 200,
            msg:"删除成功"
        };
    }else{
        ctx.body = {
            status: 400,
            msg:"删除失败"
        };
    }
});
//添加学生信息
router.post("/addStu",async (ctx)=>{
    const {name,age,address,tel,sex,identity}=ctx.request.body;
    const stu = await new Stu({
        name,
        age,
        address,
        tel,
        sex,
        identity
    });
    //save方法是异步的，必须等待它执行完成后才能ctx.body，否则，ctx.body是无法返回到页面的
    const isSuccess = await stu.save()
        .then(() => {
            return true
        })
        .catch(err => {
            console.log(err);
            return false
        });
    ctx.body = isSuccess ? {status: 200, msg: "添加成功"} : {status: 400, msg: "添加失败"}
});

//修改学生信息
router.post('/editStu/:id',async (ctx) => {
    const res = ctx.params;
    await Stu.updateOne({ name: res.id }, { $set:ctx.request.body });
    ctx.body = {
        status: 200,
        msg:"更新成功"
    };
});

//删除学生信息
router.post('/delStu/:name',async ctx => {
    const res =ctx.params;
    const { name } = res;
    if(name) {
        await Stu.deleteOne({ name: name });
        ctx.body = {
            status: 200,
            msg:"删除成功"
        };
    }
});
router.get("/findAllStu",async (ctx)=>{
    let result=await Stu.find(ctx.query).then(res=>{
        return res;
    }).catch(err=>{
        return err;
    });
    ctx.body={
        code:200,
        msg:"请求成功！",
        result:result
    }
});
module.exports = router;